package com.common.app.web

import android.app.Activity
import android.text.TextUtils
import android.util.Log
import android.webkit.JavascriptInterface
import com.common.app.core.RouterHub
import com.common.app.helper.LaunchHelper
import com.common.app.helper.RouterHelper
import com.common.app.helper.UserHelper
import com.common.base.app.extras.isEmpty
import com.common.base.app.extras.no
import com.common.base.app.extras.otherwise
import com.common.base.app.extras.yes
import com.common.base.listener.OnMyJavascriptInterfaceListener
import com.common.base.utils.JsonUtils
import com.common.base.utils.ToastUtils

/**
 * 作者：sosou
 * <p>
 * 版本：1.0
 * <p>
 * 创建日期：2022/10/13
 * <p>
 * 描述：WEB 页面交互
 *  js通信接口
 * <p>
 * 修订历史：
 */
class WebInteract(val activity: Activity,val listener: OnMyJavascriptInterfaceListener? = null) {

    val name: String
        get() = "WebInteract"

    /**
     * 关闭当前web界面
     */
    @JavascriptInterface
    fun finish() {
        activity.finish()
    }

    /**
     *
     */
    @JavascriptInterface
    fun showAsMsg(data: String?) {
//        ToastUtils.showToast(data)
        listener?.onStartFunction(data)
    }

    /**
     * 网页使用的js，方法有参数，且参数名为data
     *
     * @param data 网页js里的参数名
     */
    @JavascriptInterface
    fun communicateAsMsg(data: String?) {
        Log.e("startFunction", "----有参$data")
            ToastUtils.showToast(data)
            //            listener.onStartFunction(GsonUtils.fromJson(data, CommonJavascriptInterfaceEntity.class));
    }

    /**
     * 打开登录页面
     */
    @JavascriptInterface
    fun launchLogin() {
        LaunchHelper.launchLogin()
    }

    /**
     * 获取user
     */
    @JavascriptInterface
    fun getUser(): String {
        return (UserHelper.getUser() != null).yes { JsonUtils.toJson(UserHelper.getUser()!!) }.otherwise { "" }
    }

    @android.webkit.JavascriptInterface
    fun readImageUrl(img: String?) {  //把所有图片的url保存在ArrayList<String>中
//            images.add(img);
    }

    /**
     * 注意： 在Android4.2极其以上系统需要给提供js调用的方法前加入一个注视：@JavaScriptInterface;
     * 在虚拟机当中 Javascript调用Java方法会检测这个anotation，
     * 如果方法被标识@JavaScriptInterface则Javascript可以成功调用这个Java方法，否则调用不成功。
     *
     * @param imgs
     * @param position
     */
    @android.webkit.JavascriptInterface
    fun showImgIndex(imgs: Array<String?>?, position: String?) {
        //这里就拿到图片数据和点击的位置
//            Log.i("TAG", "position: " + position + "," + imgs[Integer.valueOf(position)]);
    }

    @android.webkit.JavascriptInterface //对于targetSdkVersion>=17的，要加这个声明
    fun openImage(allImg: String, clickimg: String) //点击图片所调用到的函数
    {
        val imgsUrl = ArrayList<String>()
        if (!TextUtils.isEmpty(allImg) && allImg.length >= 5) {
            val imgs = allImg.split(",".toRegex()).dropLastWhile { it.isEmpty() }
                .toTypedArray()
            for (s in imgs) {
                imgsUrl.add(s)
            }
        }
        var index = 0
        for (url in imgsUrl) if (url == clickimg) index =
            imgsUrl.indexOf(clickimg) //获取点击图片在整个页面图片中的位置

        imgsUrl.isEmpty().no {
            RouterHelper.navigationPostcard(RouterHub.ROUTER_PUBPAGE_IMAGE_PAGE)
                .withInt("pagerPosition", index)
//                        .withSerializable("images", imgsUrl)
                .withStringArrayList("images", imgsUrl)
                .navigation()
        }
    }
}